#ifndef __BSP_MJPEG__H__
#define __BSP_MJPEG__H__
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <pthread.h>
#include "bsp_uart.h"

extern pthread_cond_t mjpeg_encoder_exit_cond;
extern pthread_mutex_t mjpeg_encoder_exit_mutex;
// 编码格式枚举（C语言模拟）
typedef enum {
    ENCODING_FORMAT_H264,
    ENCODING_FORMAT_H265
} EncodingFormat;

// 编码参数结构体（C风格，使用char数组存储字符串）
typedef struct {
    char device[256];         // 摄像头设备路径（如/dev/video9）
    char output_file[256];    // 输出文件路径
    int width;                // 视频宽度
    int height;               // 视频高度
    int framerate;            // 帧率
    int record_seconds;       // 录制时长（0=无限）
    EncodingFormat format;    // 编码格式（H264/H265）
    int print_log;            // 是否输出日志（1=输出）
} EncoderParams;

// 编码器上下文（模拟C++类的成员变量）
typedef struct {
    // FFmpeg核心上下文
    void *input_ctx;          // AVFormatContext*（C中用void*兼容）
    void *decoder_ctx;        // AVCodecContext*
    void *encoder_ctx;        // AVCodecContext*
    void *sws_ctx;            // SwsContext*
    FILE *output_file_hdl;    // 输出文件句柄

    // 编码参数与状态
    EncoderParams params;
    int video_stream_idx;     // 视频流索引
    bool is_running;          // 编码线程运行标志
    pthread_t encode_tid;     // 编码线程ID
    bool paused;          // 编码暂停标志
} VideoEncoderContext;

// 函数声明（模拟C++类的成员函数）
// 创建编码器上下文
VideoEncoderContext* video_encoder_create(const EncoderParams *params);

// 初始化编码器（返回0=成功）
int video_encoder_init(VideoEncoderContext *ctx);

// 启动编码（创建线程）
void video_encoder_start(VideoEncoderContext *ctx);

// 停止编码（释放资源）
void video_encoder_stop(VideoEncoderContext *ctx);

// 销毁编码器（释放上下文）
void video_encoder_destroy(VideoEncoderContext *ctx);

// 编码核心循环（供线程调用）
void* encode_thread_mjpeg(void *arg);

#endif  //!__BSP_MJPEG__H__